package org.lestr.secuel.m3ds;

import java.util.Collection;

import org.lestr.secuel.m3ds.lumieres.Lumiere;
import org.lestr.secuel.m3ds.objets3D.IObjet3d;
import org.lestr.secuel.m3ds.sons.Son;

public interface Univers {


    /** Ajoute un écouteur */
    public void ajoutEcouteur(UniversEcouteur écouteur);


    /** Retire un écouteur */
    public void retraitEcouteur(UniversEcouteur écouteur);


    /** Défini le nom de l'univers */
    public void setNom(String nom);


    /** Retourne le nom de l'univers */
    public String getNom();


    /** Défini les variables de l'univers */
    public void setVariables(Collection<Variable> variables);


    /** Retourne les variables de l'univers */
    public Collection<Variable> getVariables();


    /** Ajoute une caméra à l'univers */
    public void ajoutCaméra(Camera caméra);


    /** Retire une caméra de l'univers */
    public void retraitCaméra(Camera caméra);


    /** Retourne les caméras de l'univers */
    public Iterable<Camera> getCaméras();


    /** Ajoute un objet 3D à l'univers */
    public void ajoutObjet3D(IObjet3d objet);


    /** Retire un objet 3D de l'univers */
    public void retraitObjet3D(IObjet3d objet);


    /** Retourne les objets 3D de l'univers */
    public Iterable<IObjet3d> getObjets3D();


    /** Ajoute une lumière à l'univers */
    public void ajoutLumière(Lumiere lumière);


    /** Retire une lumière de l'univers */
    public void retraitLumière(Lumiere lumière);


    /** Retourne les lumières de l'univers */
    public Iterable<Lumiere> getLumières();


    /** Ajoute un son à l'univers */
    public void ajoutSon(Son son);


    /** Retire un son de l'univers */
    public void retraitSon(Son son);


    /** Retourne les sons de l'univers */
    public Iterable<Son> getSons();


    public static interface UniversEcouteur {


        /** Le nom a été changé */
        public void nomChangé(Univers univers,
                              String ancienNom);


        /** Un objet a été ajouté */
        public void objet3DAjouté(Univers univers,
                                  IObjet3d objet);


        /** Un objet a été retiré */
        public void objet3DRetiré(Univers univers,
                                  IObjet3d objet);


        /** Une lumière a été ajoutée */
        public void lumièreAjoutée(Univers univers,
                                   Lumiere lumière);


        /** Une lumière a été retirée  */
        public void lumièreRetirée(Univers univers,
                                   Lumiere lumière);


        /** Un son a été ajouté */
        public void sonAjouté(Univers univers,
                              Son son);


        /** Un son a été retiré */
        public void sonRetiré(Univers univers,
                              Son son);


        /** Une caméra a été ajoutée */
        public void caméraAjoutée(Univers univers,
                                  Camera caméra);


        /** Une caméra a été ajoutée */
        public void caméraRetirée(Univers univers,
                                  Camera caméra);


    }// FIN Interface


}// FIN Interface
